#pragma once
#include <ntifs.h>
#include <wdf.h>
#include <fwpmk.h>
#include <fwpsk.h>
#define INITGUID
#include <guiddef.h>

#ifdef DBG
    #define DBGPRINT(_fmt, ...) DbgPrint(_fmt, __VA_ARGS__)
    #define ERRPRINT(s, c) \
        const char* str##s = #s;\
        DbgPrint("%s: %s Error, Code: %X\r\n", __FUNCTION__, str##s, c)
    #define INT3    KdBreakPoint()
#else
    #define DBGPRINT(_fmt, ...) { NOTHING; }
    #define ERRPRINT(s, c)
    #define INT3
#endif

#define USTRING_DEVICE_NAME     L"\\Device\\WfpTest"
#define USTRING_WIN32_NAME      L"\\DosDevices\\Global\\WfpTest"

typedef struct _WFP_GLOBALS
{
    PDEVICE_OBJECT lpControlDeviceObject;
    HANDLE hFilerEngine;
    UINT32 CallOutId;
    UINT64 FilterId;
}WFP_GLOBALS, * PWFP_GLOBALS;

extern WFP_GLOBALS WfpGlobals;
